package protocol.hdlc;


/**
 * Represente le protocole HDLC de la couche liaison.
 * 
 * @author Bertholet Damien & Daoust Julien
 */
public class HDLCProtocol {

	/**
	 * Valeur de n.
	 */
	protected static final int n = 3;

	/**
	 * L'encodage utilise par le protocole (ecriture/lecture de fichier).
	 */
	protected static final String charset = "UTF-8";

	/**
	 * Indique si le detail du protocole sera affiche sur la console.
	 */
	public static final boolean VERBOSE = true;

	/**
	 * C'est le flag entre les trames.
	 */
	public static final String FANION = "01111110";

	/**
	 * Le temps associe au timer pour le protocol d'envoie.
	 */
	public static final int TIMER_TIME = 3000;

	/**
	 * Calcul la taille de la fenetre en fonction de la methode d'envoie (0 pour
	 * Go-Back-N, ...).
	 * 
	 * @param sendingMethod
	 *            La methode d'envoie des donnees (0 pour Go-Back-N, ...).
	 * @return La taille de la fenetre.
	 */
	public static int calculWindowSize(int sendingMethod) {
		switch(sendingMethod) {
		case 0:
			return (int) (Math.pow(2, HDLCProtocol.n) - 1);
		default:
			throw new IllegalArgumentException("Sending method unknown :" +
			        sendingMethod);
		}
	}
}